
Nikolai Smirnov
Software Development Lead

Web scraping adalah metode yang digunakan untuk mengekstrak data dari situs web. Dalam Golang, perpustakaan Colly adalah alat populer untuk web scraping karena kesederhanaannya dan fitur kuatnya. Panduan ini akan membawa Anda melalui pengaturan proyek Golang dengan Colly, membangun scraper dasar, menangani skenario ekstraksi data yang kompleks, dan menyempurnakan scraper Anda dengan permintaan konkuren.
Sebelum memulai, pastikan Anda telah menginstal Go di sistem Anda. Inisialisasi proyek Anda dan ambil paket Colly dengan perintah berikut:
go mod init my_scraper
go get -u github.com/gocolly/colly
Ini mengatur direktori proyek Anda dan menginstal paket Colly.
Klaim Kode Bonus CapSolver Anda
Tingkatkan anggaran otomatisasi Anda secara instan!
Gunakan kode bonus CAPN saat menambahkan dana ke akun CapSolver Anda untuk mendapatkan bonus tambahan 5% pada setiap penambahan dana — tanpa batas.
Klaim sekarang di Dashboard CapSolver
.
Mari kita buat scraper dasar untuk mengekstrak semua tautan dari halaman Wikipedia tertentu.
main.go dan tambahkan kode berikut:package main
import (
"fmt"
"github.com/gocolly/colly"
)
func main() {
c := colly.NewCollector(
colly.AllowedDomains("en.wikipedia.org"),
)
c.OnHTML(".mw-parser-output", func(e *colly.HTMLElement) {
links := e.ChildAttrs("a", "href")
fmt.Println(links)
})
c.Visit("https://en.wikipedia.org/wiki/Web_scraping")
}
Kode ini menginisialisasi pengumpul Colly baru yang dibatasi pada en.wikipedia.org, lalu menyetel callback untuk menemukan dan mencetak semua tautan dalam div .mw-parser-output dari halaman tersebut.
Untuk tugas yang lebih kompleks seperti menyedot data tabel dan menulisnya ke file CSV, Anda dapat menggunakan paket encoding/csv dalam Go:
main.go dengan kode berikut untuk menyedot data tabel:package main
import (
"encoding/csv"
"log"
"os"
"github.com/gocolly/colly"
)
func main() {
fName := "data.csv"
file, err := os.Create(fName)
if err != nil {
log.Fatalf("Tidak dapat membuat file, err: %q", err)
return
}
defer file.Close()
writer := csv.NewWriter(file)
defer writer.Flush()
c := colly.NewCollector()
c.OnHTML("table.wikitable", func(e *colly.HTMLElement) {
e.ForEach("tr", func(_ int, row *colly.HTMLElement) {
rowData := []string{}
row.ForEach("td", func(_ int, cell *colly.HTMLElement) {
rowData = append(rowData, cell.Text)
})
writer.Write(rowData)
})
})
c.Visit("https://en.wikipedia.org/wiki/List_of_programming_languages")
}
Skrip ini menyedot data tabel dari halaman Wikipedia dan menulisnya ke data.csv.
Untuk mempercepat proses penyedotan, Anda dapat membuat permintaan konkuren menggunakan goroutine Go. Berikut cara menyedot beberapa halaman secara konkuren:
package main
import (
"fmt"
"github.com/gocolly/colly"
"sync"
)
func scrape(url string, wg *sync.WaitGroup) {
defer wg.Done()
c := colly.NewCollector()
c.OnHTML("title", func(e *colly.HTMLElement) {
fmt.Println("Judul ditemukan:", e.Text)
})
c.Visit(url)
}
func main() {
var wg sync.WaitGroup
urls := []string{
"https://en.wikipedia.org/wiki/Web_scraping",
"https://en.wikipedia.org/wiki/Data_mining",
"https://en.wikipedia.org/wiki/Screen_scraping",
}
for _, url := range urls {
wg.Add(1)
go scrape(url, &wg)
}
wg.Wait()
}
Dalam contoh ini, kita mendefinisikan fungsi scrape yang menerima URL dan grup tunggu sebagai argumen. Fungsi ini menginisialisasi pengumpul Colly, menyetel callback untuk mencetak judul halaman, dan mengunjungi URL tersebut. Fungsi main membuat grup tunggu, mengiterasi daftar URL, dan memulai goroutine untuk setiap URL agar menyedot secara konkuren.
Dengan mengikuti langkah-langkah ini, Anda dapat membangun scraper web yang kuat dalam Golang menggunakan Colly, menangani berbagai skenario penyedotan, dan menyempurnakan kinerja dengan permintaan konkuren. Untuk tutorial lebih rinci dan penggunaan lanjutan, periksa sumber daya tentang penyedotan web dengan Go dan Colly.
Selain Colly, terdapat beberapa perpustakaan lain yang sangat baik untuk penyedotan web dalam Golang:
Penyedotan web adalah keterampilan yang kuat dan penting untuk mengekstrak data dari situs web secara efisien. Dengan menggunakan Golang dan perpustakaan Colly, Anda dapat membangun scraper yang kuat yang menangani berbagai skenario ekstraksi data, dari mengumpulkan tautan sederhana hingga mengekstrak data tabel yang kompleks dan meningkatkan kinerja dengan permintaan konkuren.
Dalam panduan ini, Anda belajar bagaimana:
Dengan mengikuti langkah-langkah ini, Anda dapat menciptakan scraper web yang efektif dan efisien dalam Golang, memanfaatkan kesederhanaan dan fitur kuat Colly. Untuk penggunaan lanjutan dan tutorial rinci, eksplorasi sumber daya tambahan tentang penyedotan web dengan Go dan Colly.
Ya. Colly dirancang untuk sederhana dan ramah pemula sambil tetap menawarkan fitur kuat seperti pemrosesan DOM, penanganan permintaan, callback, dan konkurensi. Bahkan pengembang Go pemula dapat dengan cepat membangun scraper fungsional hanya dengan beberapa baris kode.
Tentu. Colly memungkinkan pemilihan node HTML tertentu dan atribut, yang membuatnya mudah untuk mengekstrak tabel, daftar, tautan, dan elemen terstruktur lainnya. Anda juga dapat menyimpan hasil langsung ke file seperti CSV atau JSON menggunakan perpustakaan standar Go.
Anda dapat menggunakan goroutine Go untuk memproses beberapa halaman secara bersamaan. Dengan menjalankan scraper secara konkuren dan menyinkronkannya dengan grup tunggu, kinerja penyedotan meningkat secara signifikan—terutama untuk dataset besar atau tugas crawling multi-URL.
Pelajari arsitektur pengambilan data web Rust yang dapat diskalakan dengan reqwest, scraper, pengambilan data asinkron, pengambilan data browser tanpa tampilan, rotasi proxy, dan penanganan CAPTCHA yang sesuai aturan.

Mengotomasi penyelesaian CAPTCHA dengan Nanobot dan CapSolver. Gunakan Playwright untuk menyelesaikan reCAPTCHA dan Cloudflare secara otomatis.
